package com.ddxz.middleground.master.service;

import com.ddxz.middleground.master.dto.MasterHeader;
import com.ddxz.middleground.master.dto.role.RolePage;
import com.ddxz.middleground.master.dto.role.RoleInfo;
import com.ddxz.middleground.master.util.MasterData;
import com.ddxz.tool.web.dto.DdxzResponse;

import java.util.List;

/**
 * interface description
 *
 * @author 朱宗刚
 * @version 1.0.0
 * @date 2020/7/29
 */

public interface RoleService extends MasterData {
    /**
     * 检索角色信息
     *
     * @param header 请求头信息
     * @param page   分页检索参数
     * @return 角色清单
     */
    DdxzResponse roleList(MasterHeader header, RolePage page);

    /**
     * 获取角色详情
     *
     * @param roleId 角色标识
     * @param header 请求头信息
     * @return 角色详情
     */
    DdxzResponse getRoleDetail(String roleId, MasterHeader header);

    /**
     * 保存角色信息
     *
     * @param role   角色信息
     * @param header 请求头信息
     * @return 是否保存成功
     */
    DdxzResponse saveRole(RoleInfo role, MasterHeader header);

    /**
     * 删除角色信息；如果当前角色下有绑定的用户则不允许删除；否则直接删除
     *
     * @param header 请求头信息
     * @param roleId 角色标识
     * @return 是否删除成功
     */
    DdxzResponse roleRemove(MasterHeader header, String roleId);

    /**
     * 将角色与权限进行绑定
     *
     * @param header     请求头信息
     * @param roleId     角色标识
     * @param permIdList 权限标识清单
     * @return 是否绑定成功
     */
    DdxzResponse roleGrant(MasterHeader header, String roleId, List<String> permIdList);

    /**
     * 获取角色可用的菜单清单
     *
     * @param roleId 角色清单
     * @param tenant 租户信息
     * @return 菜单清单
     */
    List<String> getMenuByRoleId(String roleId, String tenant);
}
